package com.sgcc.manager.sql.util;

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import org.apache.commons.lang.StringUtils;

/***
 * sql分类工具
 * @ProjectName：ams-app   
 * @ClassName：SqlClassifyUtil   
 * @Description: TODO
 * @author suihongxin 
 * @date 2015-2-9 下午04:11:02 
 * @version V1.0
 */
public class SqlClassUtil {
	/***
	 * sql自动分类
	 * 返回结果
	 * 1 select 查询操作 
	 * 2 update 更新
	 * 3 dll 操作
	 * @date 2015-2-9 下午04:11:55
	 * @param sql
	 * @return
	 *
	 */
	public static String autoClass(String sql){
		//查询
		List<String> selectList=new ArrayList<String>();
		selectList.add("SELECT");
		//更新
		List<String> updateList=new ArrayList<String>();
		updateList.add("INSERT");
		updateList.add("UPDATE");
		updateList.add("DELETE");
		updateList.add("MERGE");
		updateList.add("CALL");
		//dll语句
		List<String> dllList=new ArrayList<String>();
		dllList.add("CREATE");
		dllList.add("ALTER");
		dllList.add("DROP");
		dllList.add("TRUNCATE");
		dllList.add("RENAME");
		dllList.add("COMMENT");
		dllList.add("GRANT");
		dllList.add("REVOKE");
		
		//获取操作
		String opreation=StringUtils.substringBefore(sql, " ");
		//分析操作
		if(selectList.contains(opreation.toUpperCase())){
			return SqlClassConstant.OPTION_SELECT;
		}else if(updateList.contains(opreation.toUpperCase())){
			return SqlClassConstant.OPTION_UPDATE;
		}else  if(dllList.contains(opreation.toUpperCase())){
			return SqlClassConstant.OPTION_DLL;
		}
		return SqlClassConstant.OPTION_NONE;
	}
	/***
	 * 获取表头
	 * @date 2015-2-10 上午11:01:33
	 * @param sql
	 * @return
	 *
	 */
	public  static String getFieldNameStr(String sql){
		String afterStr=StringUtils.substringAfter(sql, " ");
		String fieldNameStr=StringUtils.substringBefore(afterStr, " ");
		return fieldNameStr;
	}
	
	public static String DealSql(String sql){
		//处理换行符
		String string=sql.replaceAll("\n", " ").trim();
		string=SqlClassUtil.replaceExtBlank(sql);
		//处理创建存储过程的情况
		if(isCreateProFun(string)){
			return string;
		}else {
			String [] sqlArray=StringUtils.split(string, ";");
			string=sqlArray[0];
		}
		
		return string;
	}
	
	/**
	 * 
	 * <br>Description:判断是否为创建存储过程的sql语句
	 * @param sql
	 * @return
	 */
	public static boolean isCreateProFun(String sql){
		String tempSql=sql.toUpperCase();
		if(tempSql.indexOf("CREATE OR REPLACE PROCEDURE")!=-1 || 	tempSql.indexOf("CREATE OR REPLACE FUNCTION")!=-1){
			return true;
		}
		return false;
	}
	public static boolean isSEQUENCE(String sql){
		String[] strArray =StringUtils.split(sql, " ");
		String tempSql=strArray[1].toUpperCase();
		if(tempSql.indexOf(".NEXTVAL")!=-1 || 	tempSql.indexOf(".CURRVAL")!=-1){
			return true;
		}
		return false;
	}
	public static String replaceExtBlank(String sql){
		Pattern p = Pattern.compile("\\s+");
		Matcher m = p.matcher(sql);
		sql= m.replaceAll(" ");
		return sql;
	}
	public static void main(String[] args) {
		String w= "";
		String str="hello            song";
		System.out.println("w="+w);
		int k=10/3;
		System.out.println("=="+k);
	}
}
